<?php
/**
 * View:
 * Erstellt dem auszugebenden Content
 *
 * @TODO, @NOTICE: Veraltete Klasse, bitte nicht mehr verwenden !!!
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_MVC_View Implements Yapary_MVC_IView
{
    /** @var Speicherung des Models */
    protected $oModel       = NULL;

    protected $pathPartial  = NULL;
    private   $arrException = array();

	/** @var Zentraler Dump fuer Model View und Controller */
	private   $oExchange    = NULL;

	/** @var object $oMVCGum	: Klasse zur Verbindung eines MVC-Konstrukts */
	private   $oMVCGum      = NULL;
	/** @var object $oPartial	: Klasse zur Einfuegung von Partials */
    private   $oPartial     = NULL;
    /** @var Fuer den Variablenaustauscht zwischen Controller und View gedacht */
    private   $oVariable    = NULL;
    /** @object $oMVCConfig		: MVC-Konfigurationsklasse */
    private $oMVCConfig     = NULL;


	function __construct (Yapary_MVC_Model &$_cModel, $_pathPartial, Yapary_MVC_Exchange &$_cExchange, Yapary_MVC_MVCGum &$_cMVCGum, Yapary_MVC_MVCConfig &$_cMVCConfig)
	{
	    Yapary_TraceRoute::add();

	    if (is_object($_cModel)) {
			$this->oModel = $_cModel;
		}
		$this->pathPartial = $_pathPartial;

		include_once('Partial.class.php');
		$this->oPartial = new Yapary_MVC_Partial($this, $_cModel, $this->pathPartial, $_cMVCConfig);

		$this->oExchange   = $_cExchange;

		include_once('Variable.class.php');
		$this->oVariable = new Yapary_MVC_Variable();
		$this->oMVCGum   = $_cMVCGum;
		$this->oMVCConfig= $_cMVCConfig;
	}


	/**
	 * Leitet den Zugriff auf alle vorhandenen Methoden weiter
	 * Wichtig: nur bei Methoden ohne Parameterweitergabe moeglich
	 * {model()|partial()|variable|exchange()}
	 * return Object|NULL
	 * */
	public function __get ($objName)
	{
	    if (method_exists($this, $objName)) {
	        return $this->$objName();
	    } else {
	        $this->arrException[] = new Exception('Methode ' . $objName . '() existiert nicht.');
	    }
	}


	/**
	* Gibt das Model zurueck
	* @return Yapary_MVC_Model
	*/
	protected function model ()
	{
	    return $this->oModel;
	}


	/**
	* Gibt das Partial-Objekt zurueck
	* @return Yapary_MVC_Partial
	*/
	protected function partial ()
	{
	    return $this->oPartial;
	}


	/**
	* Laedt Controller und Action und bricht ab diesem Zeitpunkt das alte MVC-Kontrukt ab
	* @param string $_mvcToLoad    : Name/Pfadname des zu ladenden MVC-Models im Format: dir1_dir2_classname.php
	* @param string $_actionname   : Name der vom Controller auszufuehrende Action
	* @param array $_arrActionVars : an die Action uz uebergebende Variablen
	* @return void
	*/
	public function forwarding ($_controllerName, $_actionName, $_viewName, array $_arrActionVars = array())
	{
	    Yapary_TraceRoute::add();

	    if ($this->oMVCGum->load($_controllerName, $_actionName, $_viewName, $_arrActionVars)) {
            return $this->oMVCGum->run();
        }
	}


	/**
	* Gibt das Variable-Objekt zurueck
	* @return Yapary_MVC_Variable
	*/
	public function variable ()
	{
		return $this->oVariable;
	}


	/**
	* Gibt das Exchange-Objekt zurueck
	* @return Yapary_MVC_Exchange
	*/
	protected function exchange ()
	{
		if ($this->oExchange === NULL) {
			$this->arrException[] = new Exception('Exchangeobjekt existiert nicht');
			return NULL;
		}

		return $this->oExchange;
	}


	/**
	* Liefert alle ausgeloesten Exceptions
	* @return Array[Exception]
	*/
	public function &getExceptionList ()
	{
		return array_merge($this->arrException, $this->partial()->getExceptionList());
	}


	/**
	* Liefert die Anzahl der vorhandenen Exceptions
	* @return int
	*/
	public function getExceptionCount ()
	{
		return count($this->arrException)+$this->partial()->getExceptionCount();
	}

}



?>
